package com.jerry.utils;

import com.jerry.entity.ProgressBar;

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class PrintProgressBar{

    /**
     * 本地打印进度条
     * @param size 文件流的大小
     */
    public static  void LocalPrintProgressBar(Long size){
        try{
            //创建对象并且赋值总大小
            ProgressBar printProgressBar = new ProgressBar(size)
                    //自定义配置
//                .noPrintProgressBar()//取消打印进度条
//                .noPrintSpeed()//取消打印速度
//                .noPrintPercentage()//取消打印百分比
//                .noPrintSize()//取消打印总大小
                    .noByteConversion()//取消字节转换
                    .setPercentageLength(50)//设置进度条长度
//                .noAutoPrintTime()//取消完成后自动打印总耗时和平均每秒速度
//                .noPrint100()//增加打印次数, 实时监控, 对性能有略微影响(在我的渣渣机子上打印20亿次仅影响10秒)
                    .setConversion("B")//自定义单位(此配置需要关闭字节转换才有效果)
                    ;
            for (long i = 0; i <= size; i++) {
                printProgressBar.print(i);//打印进度条
                Thread.sleep(1);//程序执行太快, 需要睡一会
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 网络打印进度条
     * @param URL
     */
    public static void PrintProgressBarByUrl(String URL){
        try {
            URL url = new URL(URL);
            URLConnection urlConnection = url.openConnection();
            InputStream inputStream = urlConnection.getInputStream();
            //获取文件大小
            long contentLengthLong = urlConnection.getContentLengthLong();
            //创建对象并且赋值总大小
            ProgressBar printProgressBar = new ProgressBar(contentLengthLong)
                    //自定义配置
//                .setPrintProgressBar(false)//取消打印进度条
//                .setPrintSpeed(false)//取消打印速度
//                .setPrintPercentage(false)//取消打印百分比
//                .setPrintSize(false)//取消打印总大小
//                .setByteConversion(false)//需要字节转换
//                .setPercentageLength(75)//设置进度条长度
//                .setAutoPrintTime(false)//取消完成后自动打印总耗时和平均每秒速度
//                .setPrint100(false)//增加打印次数, 实时监控, 对性能有略微影响(在我的渣渣机子上打印20亿次仅影响10秒)
//                .setConversion("字节")//自定义单位(此配置需要关闭字节转换才有效果)
                    ;
            byte[] bytes = new byte[1024 * 8];
            int len;
            while ((len = inputStream.read(bytes)) != -1) {
                printProgressBar.printAppend(len);//使用追加打印
            }
//        int count = 0;
//        while ((len = inputStream.read(bytes)) != -1) {
//            count += len;
//            printProgressBar.print(count);// 不 使用追加打印
//        }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
